home *** CD-ROM | disk | FTP | other *** search
- 0000 0001
- 0000 0002 ;MAKEBIN HEADER; COMPILE WITH SEATTLE ASSEMBLER
- 0000 0003 ;MAKEBIN HEADER V1.01 Copyright 1989 Michael Day as of 16 April 1989
- 0000 0004
- 0000 0005 FILSIZE EQU 2
- 0000 0006 ITEMCNT EQU 6
- 0000 0007 HDRSIZE EQU 8
- 0000 0008 STKSEG EQU 0EH
- 0000 0009 STKOFF EQU 10H
- 0000 0010 CODEOFF EQU 14H
- 0000 0011 CODESEG EQU 16H
- 0000 0012 RELITEM EQU 18H
- 0000 0013
- 0000 0014 ;FLAGS,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP,SP,SS
- 0000 0015
- 0000 0016 ORG 0 ;WE ASSUME THAT WE WILL BE LOADED
- 0000 0017 ENTRY: ;ON A SEGMENT BOUNDRY
- 0000 2E 0018 SEG CS
- 0001 8C 1E A9 02 0019 MOV [OLDDS],DS ;SAVE CURRENT DS
- 0005 0E 0020 PUSH CS ;THEN UPDATE IT TO OUR CS
- 0006 1F 0021 POP DS
- 0007 8C 16 B1 02 0022 MOV [OLDSS],SS
- 000B 89 26 AF 02 0023 MOV [OLDSP],SP
- 000F 89 2E AD 02 0024 MOV [OLDBP],BP
- 0013 8C 06 AB 02 0025 MOV [OLDES],ES
- 0017 89 3E A7 02 0026 MOV [OLDDI],DI
- 001B 89 36 A5 02 0027 MOV [OLDSI],SI ;SAVE ALL REGISTERS
- 001F 89 16 A3 02 0028 MOV [OLDDX],DX
- 0023 89 0E A1 02 0029 MOV [OLDCX],CX
- 0027 89 1E 9F 02 0030 MOV [OLDBX],BX
- 002B A3 9D 02 0031 MOV [OLDAX],AX
- 002E 9C 0032 PUSHF
- 002F 58 0033 POP AX
- 0030 A3 9B 02 0034 MOV [OLDFLGS],AX
- 0033 0035
- 0033 A1 97 02 0036 MOV AX,[BIPC]
- 0036 0B C0 0037 OR AX,AX ;CHECK IF ALREADY CONVERTED
- 0038 74 03 0038 JZ FIXUP
- 003A E9 77 00 0039 JMP MAKPSP ;ALREADY CONVERTED, SO JUST DO IT
- 003D 0040
- 003D 0041 FIXUP:
- 003D BE 00 04 0042 MOV SI,FILEBEG
- 0040 8B D6 0043 MOV DX,SI ;SI POINTS AT EXE HEADER
- 0042 B1 04 0044 MOV CL,4
- 0044 D3 CA 0045 ROR DX,CL ;DX CONTAINS NEW BASE SEGMENT
- 0046 81 E2 FF 0F 0046 AND DX,0FFFH
- 004A 8C C8 0047 MOV AX,CS
- 004C 03 D0 0048 ADD DX,AX
- 004E 03 54 08 0049 ADD DX,[SI+HDRSIZE]
- 0051 8B 4C 06 0050 MOV CX,[SI+ITEMCNT] ;NUMBER OF SEGMENTS TO CONVERT
- 0054 8B 5C 18 0051 MOV BX,[SI+RELITEM] ;BX POINTS AT ITEM TO CONVERT
- 0057 03 DE 0052 ADD BX,SI
- 0059 0053
- 0059 8B 44 16 0054 MOV AX,[SI+CODESEG]
- 005C 03 C2 0055 ADD AX,DX
- 005E A3 B5 02 0056 MOV [WRKCS],AX
- 0061 A3 C3 02 0057 MOV [EXECS],AX
- 0064 8B 44 14 0058 MOV AX,[SI+CODEOFF] ;SET FAR CALL ADDRESS
- 0067 A3 B3 02 0059 MOV [WRKIP],AX
- 006A A3 C1 02 0060 MOV [EXEIP],AX
- 006D 0061
- 006D B8 42 49 0062 MOV AX,4942H
- 0070 A3 97 02 0063 MOV [BIPC],AX ;MARK THE HEADER
- 0073 B8 50 43 0064 MOV AX,4350H ;CONVERT = NON-ZERO
- 0076 A3 99 02 0065 MOV [BIPC2],AX ;INDICATES IT IS CONVERTED
- 0079 0066
- 0079 0067 MAKREL:
- 0079 C4 3F 0068 LES DI,[BX] ;MANGLE THE CODE TO GET THE
- 007B 8C C0 0069 MOV AX,ES ;SEGMENT ADDRESSES RIGHT
- 007D 03 C2 0070 ADD AX,DX
- 007F 8E C0 0071 MOV ES,AX
- 0081 26 0072 SEG ES
- 0082 01 15 0073 ADD [DI],DX
- 0084 83 C3 04 0074 ADD BX,4
- 0087 E2 F0 0075 LOOP MAKREL
- 0089 0076
- 0089 8B 44 02 0077 MOV AX,[SI+FILSIZE] ;SAVE PROGRAM SIZE
- 008C A3 CD 02 0078 MOV [PRGSIZ],AX
- 008F 0079
- 008F 8B 44 0E 0080 MOV AX,[SI+STKSEG]
- 0092 03 C2 0081 ADD AX,DX ;CREATE THE STACK
- 0094 A3 B9 02 0082 MOV [WRKSS],AX ;BASED ON THE EXE INFO
- 0097 A3 C7 02 0083 MOV [EXESS],AX
- 009A A3 BF 02 0084 MOV [BINSS],AX
- 009D 8B 44 10 0085 MOV AX,[SI+STKOFF]
- 00A0 A3 B7 02 0086 MOV [WRKSP],AX
- 00A3 A3 C5 02 0087 MOV [EXESP],AX
- 00A6 A3 BD 02 0088 MOV [BINBP],AX
- 00A9 0089
- 00A9 83 EA 10 0090 SUB DX,16
- 00AC 89 16 C9 02 0091 MOV [PSPSEG],DX ;SAVE OUR PSP POINTER
- 00B0 89 16 BB 02 0092 MOV [BINDS],DX ;WE WILL POINT DS THERE ON ENTRY
- 00B4 0093 MAKPSP:
- 00B4 E8 A3 01 0094 CALL CHGCHK ;CHECK FOR ENTRY ADR CHANGE
- 00B7 75 60 0095 JNZ SKIPSP ;WARM ENTRY, DON'T RE-CREATE PSP
- 00B9 0096
- 00B9 8B 16 C9 02 0097 MOV DX,[PSPSEG] ;GET A COPY OF PSP IN DX
- 00BD 8B C2 0098 MOV AX,DX ;CLEAR THE PSP
- 00BF 2D 02 00 0099 SUB AX,2 ;PLUS 32 BYTES BELOW IT
- 00C2 8E D8 0100 MOV DS,AX
- 00C4 33 DB 0101 XOR BX,BX
- 00C6 B9 20 01 0102 MOV CX,256+16+16 ;CLEAR PSP, MCB, AND WORK AREA
- 00C9 0103 CLRIT:
- 00C9 C6 07 00 0104 MOV B,[BX],0
- 00CC 43 0105 INC BX
- 00CD E2 FA 0106 LOOP CLRIT
- 00CF 0107
- 00CF 33 DB 0108 XOR BX,BX
- 00D1 C7 07 97 02 0109 MOV [BX],DATATAB ;STORE POINTER TO DATA TABLE
- 00D5 8C 4F 02 0110 MOV [BX+2],CS
- 00D8 0111
- 00D8 BB 10 00 0112 MOV BX,16
- 00DB C7 07 5A 00 0113 MOV [BX],5AH ;DUMMY END MCB
- 00DF 89 57 01 0114 MOV [BX+1],DX ;WE ARE THE OWNER
- 00E2 2E 0115 SEG CS
- 00E3 A1 CD 02 0116 MOV AX,[PRGSIZ]
- 00E6 89 47 03 0117 MOV [BX+3],AX ;HOW BIG IT IS
- 00E9 0118
- 00E9 8E DA 0119 MOV DS,DX
- 00EB B9 0B 00 0120 MOV CX,11 ;CLEAR FCB1 & FCB2 AREA
- 00EE 33 DB 0121 XOR BX,BX
- 00F0 0122 CLRFCB1:
- 00F0 C6 47 5D 20 0123 MOV B,[BX+5DH],20H
- 00F4 C6 47 6D 20 0124 MOV B,[BX+6DH],20H
- 00F8 43 0125 INC BX
- 00F9 E2 F5 0126 LOOP CLRFCB1
- 00FB 0127
- 00FB B4 62 0128 MOV AH,62H ;GET CURRENT PSP SEG
- 00FD CD 21 0129 INT 21H ;IN BX
- 00FF B9 15 00 0130 MOV CX,15H ;COPY BEG OF THIER PSP TO OURS
- 0102 33 F6 0131 XOR SI,SI
- 0104 E8 46 01 0132 CALL CPYPSP
- 0107 0133
- 0107 2E 0134 SEG CS
- 0108 A1 CD 02 0135 MOV AX,[PRGSIZ] ;UPDATE THE END OF MEMORY
- 010B 8C C1 0136 MOV CX,ES ;FOR OUR PSP
- 010D 03 C1 0137 ADD AX,CX ;LAST SEG = LENGTH OF PRG + CS
- 010F 26 0138 SEG ES
- 0110 A3 02 00 0139 MOV [2],AX
- 0113 0140
- 0113 26 0141 SEG ES
- 0114 C6 06 80 00 1E 0142 MOV B,[80H],1EH ;SET CMD LINE LENGTH BYTE
- 0119 0143
- 0119 0144 SKIPSP:
- 0119 B4 62 0145 MOV AH,62H ;GET CURRENT PSP SEG
- 011B CD 21 0146 INT 21H ;IN BX
- 011D 2E 0147 SEG CS
- 011E 89 1E CB 02 0148 MOV [OLDPSP],BX ;SAVE CALLERS PSP
- 0122 0149
- 0122 B9 45 00 0150 MOV CX,45H ;GET COPY OF CALLER'S ENV,
- 0125 BE 16 00 0151 MOV SI,16H ;HANDLE TABLE, AND PID.
- 0128 E8 22 01 0152 CALL CPYPSP
- 012B 0153
- 012B B4 50 0154 MOV AH,50H
- 012D 2E 0155 SEG CS
- 012E 8B 1E C9 02 0156 MOV BX,[PSPSEG] ;SET DOS TO OUR OWN PSP
- 0132 CD 21 0157 INT 21H
- 0134 0158
- 0134 BB 20 00 0159 MOV BX,20H
- 0137 BF CF 02 0160 MOV DI,OLD20 ;SWAP TERMINATE ADDRESS
- 013A B8 F7 01 0161 MOV AX,INTRET ;WITH OUR OWN
- 013D E8 2B 01 0162 CALL SETINT
- 0140 0163
- 0140 BB 27 00 0164 MOV BX,27H
- 0143 BF D7 02 0165 MOV DI,OLD27 ;SWAP DOS TSR VECTOR
- 0146 B8 F7 01 0166 MOV AX,INTRET ;WITH OUR OWN (SAME AS NORMAL EXIT)
- 0149 E8 1F 01 0167 CALL SETINT
- 014C 0168
- 014C BB 21 00 0169 MOV BX,21H
- 014F BF D3 02 0170 MOV DI,OLD21 ;SWAP DOS INT VECTOR
- 0152 B8 1F 02 0171 MOV AX,MYDOS ;WITH OUR OWN
- 0155 E8 13 01 0172 CALL SETINT
- 0158 0173
- 0158 0E 0174 PUSH CS
- 0159 1F 0175 POP DS
- 015A 83 3E B9 02 00 0176 CMP W,[WRKSS],0 ;DON'T SWITCH IF ZERO
- 015F 74 0A 0177 JZ NOSTACK
- 0161 FA 0178 CLI
- 0162 8E 16 B9 02 0179 MOV SS,[WRKSS] ;SWITCH THE STACK
- 0166 8B 26 B7 02 0180 MOV SP,[WRKSP]
- 016A FB 0181 STI
- 016B 0182 NOSTACK:
- 016B B8 85 01 0183 MOV AX,CFRET ;SAVE OUR RETURN ADDRESS ON STACK
- 016E 0E 0184 PUSH CS
- 016F 50 0185 PUSH AX
- 0170 FF 36 B5 02 0186 PUSH [WRKCS] ;PUSH EXE ENTRY ON STACK
- 0174 FF 36 B3 02 0187 PUSH [WRKIP]
- 0178 8B 2E BD 02 0188 MOV BP,[BINBP] ;SET UP BP TO POINT AT WHERE-EVER
- 017C 8E 06 C9 02 0189 MOV ES,[PSPSEG] ;SET UP ES TO POINT AT PSP
- 0180 8E 1E BB 02 0190 MOV DS,[BINDS] ;SET UP DS TO POINT AT WHERE-EVER
- 0184 CB 0191 RET L ;ENTER THE EXE PRG VIA STACK
- 0185 0192
- 0185 0193 ;---------------------------------------------------------------
- 0185 0194 ; upon completion of the EXE program we return to here
- 0185 0195
- 0185 0196 CFRET:
- 0185 2E 0197 SEG CS ;FAR CALL RETURN
- 0186 8C 1E BB 02 0198 MOV [BINDS],DS ;SAVE CURRENT DS FOR RE-ENTRY
- 018A 0199 WARMRET:
- 018A 2E 0200 SEG CS ;WARM START = ENTRY POINT WAS CHANGED
- 018B 8C 16 B9 02 0201 MOV [WRKSS],SS ;USE THE CURRENT STACK FOR WARM RE-ENTRY
- 018F 2E 0202 SEG CS
- 0190 89 26 B7 02 0203 MOV [WRKSP],SP
- 0194 0204 DORET:
- 0194 2E 0205 SEG CS
- 0195 89 2E BD 02 0206 MOV [BINBP],BP ;ALSO SAVE BP
- 0199 2E 0207 SEG CS
- 019A 8C 16 BF 02 0208 MOV [BINSS],SS ;SAVE OUR STACK SEG TOO
- 019E 0209
- 019E BB 20 00 0210 MOV BX,20H
- 01A1 BF CF 02 0211 MOV DI,OLD20 ;RESTORE OLD INT 20H
- 01A4 E8 DD 00 0212 CALL CLRINT
- 01A7 0213
- 01A7 BB 21 00 0214 MOV BX,21H
- 01AA BF D3 02 0215 MOV DI,OLD21 ;RESTORE OLD INT 21H
- 01AD E8 D4 00 0216 CALL CLRINT
- 01B0 0217
- 01B0 BB 27 00 0218 MOV BX,27H
- 01B3 BF D7 02 0219 MOV DI,OLD27 ;RESTORE OLD INT 27H
- 01B6 E8 CB 00 0220 CALL CLRINT
- 01B9 0221
- 01B9 B4 50 0222 MOV AH,50H
- 01BB 2E 0223 SEG CS
- 01BC 8B 1E CB 02 0224 MOV BX,[OLDPSP] ;RESTORE CALLERS PSP
- 01C0 CD 21 0225 INT 21H
- 01C2 0226
- 01C2 0E 0227 PUSH CS
- 01C3 1F 0228 POP DS
- 01C4 FA 0229 CLI
- 01C5 8E 16 B1 02 0230 MOV SS,[OLDSS]
- 01C9 8B 26 AF 02 0231 MOV SP,[OLDSP]
- 01CD FB 0232 STI
- 01CE 8B 2E AD 02 0233 MOV BP,[OLDBP]
- 01D2 8E 06 AB 02 0234 MOV ES,[OLDES]
- 01D6 8B 3E A7 02 0235 MOV DI,[OLDDI]
- 01DA 8B 36 A5 02 0236 MOV SI,[OLDSI] ;RESTORE ALL REGISTERS
- 01DE 8B 16 A3 02 0237 MOV DX,[OLDDX]
- 01E2 8B 0E A1 02 0238 MOV CX,[OLDCX]
- 01E6 8B 1E 9F 02 0239 MOV BX,[OLDBX]
- 01EA A1 9B 02 0240 MOV AX,[OLDFLGS] ;RESTORE FLAGS
- 01ED 50 0241 PUSH AX
- 01EE 9D 0242 POPF
- 01EF A1 9D 02 0243 MOV AX,[OLDAX]
- 01F2 8E 1E A9 02 0244 MOV DS,[OLDDS] ;RESTORE DS
- 01F6 CB 0245 RET L ;AND GO HOME
- 01F7 0246
- 01F7 0247 INTRET:
- 01F7 2E 0248 SEG CS
- 01F8 8C 1E BB 02 0249 MOV [BINDS],DS ;SAVE CURRENT DS FOR RE-ENTRY
- 01FC 0E 0250 PUSH CS
- 01FD 1F 0251 POP DS
- 01FE E8 59 00 0252 CALL CHGCHK ;CHECK FOR ENTRY ADR CHANGE
- 0201 75 87 0253 JNZ WARMRET ;WARM START IF CHANGED]
- 0203 0254
- 0203 A1 C9 02 0255 MOV AX,[PSPSEG] ;IT WAS A COLD RETURN,
- 0206 A3 BB 02 0256 MOV [BINDS],AX ;SO RESTORE ALL REGISTERS
- 0209 A1 C7 02 0257 MOV AX,[EXESS] ;TO START UP CONDITION
- 020C A3 B9 02 0258 MOV [WRKSS],AX
- 020F A1 C5 02 0259 MOV AX,[EXESP]
- 0212 A3 B7 02 0260 MOV [WRKSP],AX
- 0215 E9 7C FF 0261 JMP DORET
- 0218 0262
- 0218 0263 DOMEM:
- 0218 B8 08 00 0264 MOV AX,8
- 021B 33 DB 0265 XOR BX,BX ;TELL THEM THEY CAN'T ALLOCATE MEMORY
- 021D F9 0266 STC
- 021E CF 0267 IRET
- 021F 0268
- 021F 0269 MYDOS:
- 021F 82 FC 00 0270 CMP AH,0 ;ZERO TERMINATE
- 0222 74 D3 0271 JZ INTRET
- 0224 82 FC 4C 0272 CMP AH,4CH ;ALTERNATE TERMINATE
- 0227 74 CE 0273 JZ INTRET
- 0229 82 FC 31 0274 CMP AH,31H ;TSR TERMINATE
- 022C 74 C9 0275 JZ INTRET
- 022E 82 FC 48 0276 CMP AH,48H ;ALLOC MEM
- 0231 74 E5 0277 JZ DOMEM
- 0233 82 FC 49 0278 CMP AH,49H ;FREE MEM
- 0236 74 E0 0279 JZ DOMEM
- 0238 82 FC 4A 0280 CMP AH,4AH ;MODIFY MEM
- 023B 74 DB 0281 JZ DOMEM
- 023D 82 FC 4B 0282 CMP AH,4BH ;LOAD AND EXEC
- 0240 74 D6 0283 JZ DOMEM
- 0242 0284
- 0242 2E 0285 SEG CS
- 0243 FF 36 D5 02 0286 PUSH [OLD21S] ;PUSH OLD DOS ENTRY ON STACK
- 0247 2E 0287 SEG CS
- 0248 FF 36 D3 02 0288 PUSH [OLD21]
- 024C CB 0289 RET L ;AND RETURN TO IT
- 024D 0290
- 024D 0291 ;COPY ALL OR PART OF CALLER'S PSP
- 024D 0292 ;NOTE THAT OUR PSP IS NOT A CHILD PSP, BUT RATHER
- 024D 0293 ;AN INDEPENDANT COPY OF THE PARENT PSP.
- 024D 0294 CPYPSP:
- 024D FC 0295 CLD
- 024E 8E DB 0296 MOV DS,BX
- 0250 2E 0297 SEG CS
- 0251 8E 06 C9 02 0298 MOV ES,[PSPSEG]
- 0255 8B FE 0299 MOV DI,SI
- 0257 F3 0300 REP
- 0258 A4 0301 MOVSB
- 0259 C3 0302 RET
- 025A 0303
- 025A 0304 ;CHECK IF ENTRY ADDRESS WAS CHANGED
- 025A 0305 CHGCHK:
- 025A A1 B5 02 0306 MOV AX,[WRKCS] ;IF THEY CHANGED THE ENTRY, THEN
- 025D 3B 06 C3 02 0307 CMP AX,[EXECS] ;WE DO A WARM RESTART INSTEAD
- 0261 75 07 0308 JNZ CHGRET
- 0263 A1 B3 02 0309 MOV AX,[WRKIP]
- 0266 3B 06 C1 02 0310 CMP AX,[EXEIP]
- 026A 0311 CHGRET:
- 026A C3 0312 RET
- 026B 0313
- 026B 0314 ;SWAP INTERRUPT VECTOR
- 026B 0315 SETINT:
- 026B 33 C9 0316 XOR CX,CX ;DS POINTS AT INT VECTORS
- 026D 8E D9 0317 MOV DS,CX
- 026F 03 DB 0318 ADD BX,BX ;BX = INT NUMBER
- 0271 03 DB 0319 ADD BX,BX
- 0273 C4 0F 0320 LES CX,[BX] ;GET CURRENT VALUE
- 0275 2E 0321 SEG CS
- 0276 89 0D 0322 MOV [DI],CX ;SAVE IT IN MEMORY DI = SAVE ADDR
- 0278 2E 0323 SEG CS
- 0279 8C 45 02 0324 MOV [DI+2],ES
- 027C FA 0325 CLI
- 027D 89 07 0326 MOV [BX],AX ;SET NEW VALUE AX = OFFSET
- 027F 8C 4F 02 0327 MOV [BX+2],CS
- 0282 FB 0328 STI
- 0283 C3 0329 RET
- 0284 0330
- 0284 0331 ;RESTORE INTERRUPT VECTOR
- 0284 0332 CLRINT:
- 0284 33 C9 0333 XOR CX,CX ;DS POINTS AT INT VECTORS
- 0286 8E D9 0334 MOV DS,CX
- 0288 03 DB 0335 ADD BX,BX ;BX = INT NUMBER
- 028A 03 DB 0336 ADD BX,BX
- 028C 2E 0337 SEG CS
- 028D C4 0D 0338 LES CX,[DI] ;RECOVER OLD VALUE FROM MEM
- 028F FA 0339 CLI
- 0290 89 0F 0340 MOV [BX],CX ;RESTORE OLD VECTOR CX = OFFSET
- 0292 8C 47 02 0341 MOV [BX+2],ES ;ES = SEGMENT
- 0295 FB 0342 STI
- 0296 C3 0343 RET
- 0297 0344
- 0297 0345 ;*********************************************************
- 0297 0346 ;THIS TABLE MUST REMAIN IN THIS ORDER FOR EXTERNAL ACCESS
- 0297 0347
- 0297 0348 DATATAB EQU $
- 0297 0349
- 0297 00 00 0350 BIPC DW 0 ;LOADER ID
- 0299 00 00 0351 BIPC2 DW 0 ;CONVERSION FLAG (0 = NOT CONVERTED)
- 029B 00 00 0352 OLDFLGS DW 0 ;CALLERS REGISTERS
- 029D 00 00 0353 OLDAX DW 0
- 029F 00 00 0354 OLDBX DW 0
- 02A1 00 00 0355 OLDCX DW 0
- 02A3 00 00 0356 OLDDX DW 0
- 02A5 00 00 0357 OLDSI DW 0
- 02A7 00 00 0358 OLDDI DW 0
- 02A9 00 00 0359 OLDDS DW 0
- 02AB 00 00 0360 OLDES DW 0
- 02AD 00 00 0361 OLDBP DW 0
- 02AF 00 00 0362 OLDSP DW 0 ;CALLERS STACK OFFSET
- 02B1 00 00 0363 OLDSS DW 0 ;CALLERS STACK SEGMENT
- 02B3 00 00 0364 WRKIP DW 0 ;POINTER TO CODE ENTRY
- 02B5 00 00 0365 WRKCS DW 0
- 02B7 00 00 0366 WRKSP DW 0 ;OUR STACK OFFSET
- 02B9 00 00 0367 WRKSS DW 0 ;OUR STACK SEGMENT
- 02BB 0368
- 02BB 00 00 0369 BINDS DW 0 ;OUR OWN DS ON EXIT
- 02BD 00 00 0370 BINBP DW 0 ;OUR OWN BP ON EXIT
- 02BF 00 00 0371 BINSS DW 0 ;LAST KNOW STACK SEG
- 02C1 00 00 0372 EXEIP DW 0 ;ORIGINAL EXE ENTRY OFFSET
- 02C3 00 00 0373 EXECS DW 0 ;ORIGINAL EXE ENTRY SEGMENT
- 02C5 00 00 0374 EXESP DW 0 ;ORIGINAL EXE STACK OFFSET
- 02C7 00 00 0375 EXESS DW 0 ;ORIGINAL EXE STACK SEGMENT
- 02C9 00 00 0376 PSPSEG DW 0 ;OUR PSP SEG
- 02CB 00 00 0377 OLDPSP DW 0 ;PREV PSP SEG
- 02CD 00 00 0378 PRGSIZ DW 0 ;SIZE OF PROGRAM FILE IN PARAGRAPHS (SEG)
- 02CF 0379
- 02CF 0380
- 02CF 0381 ;**********************************************************
- 02CF 0382 ;END OF FIXED TABLE ACCESS
- 02CF 0383
- 02CF 00 00 0384 OLD20 DW 0 ;PREV INT 20 OFFSET
- 02D1 00 00 0385 OLD20S DW 0 ;PREV INT 20 SEGMENT
- 02D3 00 00 0386 OLD21 DW 0 ;PREV INT 21 OFFSET
- 02D5 00 00 0387 OLD21S DW 0 ;PREV INT 21 SEGMENT
- 02D7 00 00 0388 OLD27 DW 0 ;PREV INT 27 OFFSET
- 02D9 00 00 0389 OLD27S DW 0 ;PREV INT 27 SEGMENT
- 02DB 0390
- 02DB 0391
- 02DB 0392 DS 256+16+16 ;MINIMAL STORAGE AREA FOR PSP+MCB+MISC
- 03FB 0393 PRGEND EQU $ ;MINIMUM HEADER SIZE NEEDED
- 03FB 0394
- 03FB 0395 LAST EQU 400H ;MAKE THIS AT A SEGMENT BOUNDRY PAST PRGEND
- 03FB 0396
- 03FB 0397 FILEBEG EQU LAST ;EXE IS LOADED AT SEGMENT BOUNDRY
- 03FB 0398
-
-
- Error Count = 0